package cn.han.thread;
//本类用于多线程编程实现方案1：继承Thread类来完成
public class TestThread1 {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        MyThread mt1 =new MyThread();
        MyThread mt2 = new MyThread();
        MyThread mt3 = new MyThread();
        MyThread mt4 = new MyThread();
        mt.start();

        mt4.start();//以多线程的方式启动
        mt2.start();
        mt3.start();
        mt1.start();
    }
}
//1.自定义一个多线程类，然后让这个类继承Thread
class MyThread extends Thread{
    /*1.多线程编程实现的方案1：通过继承Thread类并重写run来完成的
    * 2.super.run()表示的是调用的父类的业务，我们现在要用自己的业务，所以注释掉
    * 3.完成业务：打印十次当前正在执行的线程的名称
    * 4.getName表示可以获取当前正在执行的线程名称
    * 由于本类继承了Thread类，所以可以直接使用这个方法
    * 5.new 对应的是线程的新建状态
    * 6.要想模拟多线程，至少得启动2个线程，如果只启动1个，是单线程程序
    * 7.这个run如果直接这样调用，是没有多线程抢占执行的效果的
    * 只是把这两句话看做普通方法的效果，谁先写，就先执行谁
    * 8.start对应的状态就是就绪状态，会把刚刚新建好的线程加入到就绪队列之中
    * 至于什么时候执行，就是多线程执行的效果，需要等待OS选中分配CPU
    * 9.线程的执行具有随机性，也就是说具体怎么执行
    * 取决于CPU的调度时间片的分配，我们是决定不了的*/
    @Override
    //重写run，run里是我们自己的业务

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i+"="+getName());
        }
//        super.run();
    }
}